package org.study.atomikos.mybatis.boot.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.study.atomikos.mybatis.boot.mapper.primary.Ds1UserMapper;
import org.study.atomikos.mybatis.boot.mapper.secondary.Ds2UserMapper;

/**
 * 创建一个 Service 实现，模拟两种不同的情况。
 * 这里 tx 函数，是两句 update 操作，一般都会成功；
 * 而 tx2 函数中，我们人为的制造了一个异常，这个异常是在 test1 库中的数据更新后才产生的，这样就可以测试一下 test1 更新成功，之后是否还能在 JTA 的帮助下实现回滚。
 *
 * @author Administrator
 * @date 2021-11-29
 */
@Service
public class TestService {
    @Autowired
    private Ds1UserMapper ds1UserMapper;
    @Autowired
    private Ds2UserMapper ds2UserMapper;

    @Transactional(rollbackFor = Exception.class)
    public void txCommit() {
        ds1UserMapper.update(20, "admin");
        ds2UserMapper.update(30, "test");
    }

    @Transactional(rollbackFor = Exception.class)
    public void txRollback() {
        ds1UserMapper.update(20, "admin");
        ds2UserMapper.update(30, "test");
        // 模拟异常
        throw new RuntimeException();
    }
}
